iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1
自我挑戰組

關於我的佛系SCSS開發系列 第 4

鐵人賽04天@extend

  • 分享至 

  • xImage
  •  

今天意外需要早點上來解每日任務,因為晚上要看半澤先發就可以專心看了(X

昨天我們有稍微提到@extend,今天我們用一些範例來探討一下使用方式

編譯前
.error {
  border: 1px #f00;
  background-color: #fdd;

  &--serious {
    @extend .error;
    border-width: 3px;
  }
}
編譯後
.error, .error--serious {
  border: 1px #f00;
  background-color: #fdd;
}

.error--serious {
  border-width: 3px;
}

這個就是一個很基本@extend範例,共用繼承的樣式位置會往前提升, 繼承同一個 css 的 class,編譯出的內容會放在一起。

!optional的用法


.notice {
    color: #F00;
    font-size: 16px;
}

.important {
    @extend .notice2 !optional;
}

加上「!optional」修飾詞,表示當extend不存在樣式名稱時,則不做編譯,是很神奇看了官網介紹才知道這個東西作法,如果我們去做@extend,萬一沒有這個屬性,直接編譯這樣會產生錯誤的,這時候我們可以透過!optional,讓他不會沒有存在樣式,不會爆錯也可以編譯

編譯前
@media screen and (max-width: 600px) {
  .error--serious {
    @extend .error;
  }
}

.error {
  border: 1px #f00;
  background-color: #fdd;
}

@media範圍裡面使用@extend 呼叫指定樣式名稱時,該樣式不能放在@media 範圍之外,否則會出錯,@media 範圍裡面才行,這個基本上這樣設定是蠻合理方式,主要是我們的@extend會把共用拿出去外面做完使用,而這樣拉去出去外層,有可能導致我們不了解原始的斷點是設定在哪個位置,上述是推測因為這樣原因,所以不能使用在斷點裡面,如果要用必須要全部設定斷點裡面就不會有這樣的問題

後面還有他跟mixin的愛恨情仇,等到後面主角(mixin)出現我們再來解釋吧


上一篇
鐵人賽03天Placeholder Selectors
下一篇
鐵人賽05天Parent Selector
系列文
關於我的佛系SCSS開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言